What is @astrojs/compiler?
@astrojs/compiler is a package designed to compile Astro components into static HTML and JavaScript. It is part of the Astro framework, which is focused on building fast, content-focused websites. The compiler transforms Astro component files (.astro) into optimized static assets.
What are @astrojs/compiler's main functionalities?
Compile Astro Components
This feature allows you to compile Astro component code into static HTML and JavaScript. The `compile` function takes Astro code as input and returns a promise that resolves to the compiled result.
const { compile } = require('@astrojs/compiler');
const astroCode = `<div>Hello, World!</div>`;
compile(astroCode).then(result => {
console.log(result);
});
Transform Astro Files
The `transform` function is used to transform Astro files into a format that can be further processed or optimized. It takes the content of an Astro file and returns a promise that resolves to the transformed result.
const { transform } = require('@astrojs/compiler');
const astroFileContent = `<div>Hello, World!</div>`;
transform(astroFileContent).then(result => {
console.log(result);
});
Optimize Output
This feature allows you to optimize the output of the compiled Astro components. By passing an options object with `optimize: true`, the compiler will produce optimized static assets.
const { compile } = require('@astrojs/compiler');
const astroCode = `<div>Hello, World!</div>`;
compile(astroCode, { optimize: true }).then(result => {
console.log(result);
});
Other packages similar to @astrojs/compiler
svelte
Svelte is a compiler that converts Svelte components into highly optimized JavaScript at build time. Unlike Astro, which focuses on static site generation, Svelte is more geared towards building reactive user interfaces.
vue-template-compiler
Vue Template Compiler is used to compile Vue.js templates into render functions. It is similar to @astrojs/compiler in that it transforms component code into optimized output, but it is specific to the Vue.js framework.
babel
Babel is a JavaScript compiler that transforms modern JavaScript code into a backward-compatible version. While it is not specific to any framework, it provides similar functionality in terms of code transformation and optimization.
Astro Compiler
Astro’s Go + WASM compiler.
Install
npm install @astrojs/compiler
Usage
Transform .astro
to valid TypeScript
The Astro compiler can convert .astro
syntax to a TypeScript Module whose default export generates HTML.
Some notes...
- TypeScript is valid
.astro
syntax! The output code may need an additional post-processing step to generate valid JavaScript. .astro
files rely on a server implementation exposed as astro/runtime/server/index.js
in the Node ecosystem. Other runtimes currently need to bring their own rendering implementation and reference it via internalURL
. This is a pain point we're looking into fixing.
import { transform, type TransformResult } from "@astrojs/compiler";
const result = await transform(source, {
filename: "/Users/astro/Code/project/src/pages/index.astro",
sourcemap: "both",
internalURL: "astro/runtime/server/index.js",
});
Parse .astro
and return an AST
The Astro compiler can emit an AST using the parse
method.
Some notes...
- Position data is currently incomplete and in some cases incorrect. We're working on it!
- A
TextNode
can represent both HTML text
and JavaScript/TypeScript source code. - The
@astrojs/compiler/utils
entrypoint exposes a walk
function that can be used to traverse the AST. It also exposes the is
helper which can be used as guards to derive the proper types for each node
.
import { parse } from "@astrojs/compiler";
import { walk, is } from "@astrojs/compiler/utils";
const result = await parse(source, {
position: false,
});
walk(result.ast, (node) => {
if (is.tag(node)) {
console.log(node.name);
}
});
Develop
VSCode / CodeSpaces
A devcontainer
configuration is available for use with VSCode's Remote Development extension pack and GitHub CodeSpaces.
Contributing
CONTRIBUTING.md